Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2장. Raw Query 중심 접근

데이터베이스에 접근하는 가장 기본적인 방법은
SQL을 직접 작성하고 실행하는 것이다.

이 방식은 별도의 추상화 없이
애플리케이션이 데이터베이스와 직접 통신하는 형태를 가진다.

const result = await db.query(
  "SELECT * FROM users WHERE id = $1",
  [userId]
);

SQL을 문자열로 작성하고,
파라미터를 바인딩하여 실행하는 구조다.


Raw Query의 핵심 특징

이 방식은 몇 가지 명확한 특징을 가진다.

  • SQL이 코드에 그대로 드러난다
  • 데이터베이스에 직접 의존한다
  • 별도의 추상화 계층이 거의 없다

즉, 데이터 접근에 대한 모든 제어를
개발자가 직접 가지는 구조다.


개발자가 직접 제어한다는 것

Raw Query의 가장 큰 특징은
“직접 제어한다”는 점이다.

어떤 데이터를 어떻게 가져올지,
어떤 조건을 사용할지,
어떤 조인을 수행할지 모두 SQL로 명확하게 표현된다.

이 구조에서는

  • 실행되는 쿼리가 명확하게 보이고
  • 데이터베이스의 기능을 그대로 활용할 수 있다

Raw Query의 장점

이 방식은 단순하지만 강력하다.

가장 큰 장점은 다음과 같다.

  • 성능 제어가 용이하다
    → 실행되는 SQL을 그대로 다룰 수 있다

  • 복잡한 쿼리 작성이 자유롭다
    → JOIN, GROUP BY, 서브쿼리 등 제약이 없다

  • 디버깅이 명확하다
    → 실제 실행되는 SQL을 그대로 확인할 수 있다

  • 데이터베이스 기능을 100% 활용할 수 있다
    → 특정 DB의 고유 기능도 그대로 사용 가능

이 때문에 Raw Query는 지금도 여전히 많이 사용된다.


규모가 커지면서 드러나는 한계

하지만 애플리케이션이 커지기 시작하면
이 방식의 한계가 점점 드러난다.

  • 동일한 쿼리 패턴이 반복된다
  • 조건이 많아질수록 쿼리 관리가 어려워진다
  • 코드 레벨에서 구조화하기 어렵다
  • 비즈니스 로직과 분리하기 힘들다

특히 동적인 조건이 많아질수록
SQL을 문자열로 다루는 부담이 커진다.


여전히 사용되는 이유

그럼에도 불구하고 Raw Query는
여전히 중요한 선택지로 남아 있다.

다음과 같은 경우에는 오히려 더 적합하다.

  • 복잡한 통계 쿼리
  • 성능 최적화가 중요한 기능
  • 다른 방식으로 표현하기 어려운 복잡한 쿼리

즉, 이 방식은 사라진 기술이 아니라
👉 가장 직접적인 접근 방식으로 계속 사용되고 있다


다음 단계로의 흐름

하지만 반복되는 쿼리와
문자열 기반 SQL 관리의 한계를 줄이기 위해

데이터 접근을 조금 더 구조적으로 다루려는 시도가 등장한다.

특히

  • SQL을 직접 조합하지 않고
  • 코드 구조 안에서 안전하게 쿼리를 구성하려는 방향

으로 발전하게 된다.